#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QAction>
#include <QFont>
#include <QPlainTextEdit>
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 创建菜单栏
    QMenuBar* menubar = this->menuBar();
    this->setMenuBar(menubar);
    this->setWindowTitle("简单的记事本");

    // 创建菜单
    QMenu* file = new QMenu("文件");
    menubar->addMenu(file);

    // 为菜单添加菜单项
    QAction* openFile = new QAction("打开");
    QAction* saveFile = new QAction("保存");
    file->addAction(openFile);
    file->addAction(saveFile);

    // 指定一个输入框
    edit = new QPlainTextEdit();
    this->setCentralWidget(edit);

    // 设置输入格式
    QFont font;
    font.setPixelSize(20);
    edit->setFont(font);

    // 将菜单项与函数进行连接
    connect(openFile,&QAction::triggered,this,&MainWindow::OpenFile);
    connect(saveFile,&QAction::triggered,this,&MainWindow::SaveFile);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::OpenFile()
{
    // 1. 获取文件名
    // 弹出"打开文件"对话框
    QString path = QFileDialog::getOpenFileName(this);

    // 把文件名显示在状态栏
    QStatusBar* statusbar = this->statusBar();
    statusbar->showMessage(path);

    // 2. 获取文件内容，并将文件内容显示在输入框内
    // 根据用户选择的路径创建 QFile对象，并打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::ReadOnly);
    if(ret != true)
    {
        // 文件打开失败
        statusbar->showMessage(path + "打开失败");
        return;
    }

    // 读取文件
    QString str = file.readAll();

    // 关闭文件
    file.close();

    // 将读取到的内容写入输入框
    edit->setPlainText(str);
}

void MainWindow::SaveFile()
{
    // 1. 获取文件名
    // 弹出"保存文件"对话框
    QString path = QFileDialog::getSaveFileName(this);

    // 把文件名显示在状态栏
    QStatusBar* statusbar = this->statusBar();
    statusbar->showMessage(path);

    // 2. 从输入框中获取文件内容，并将文件内容保存在新创建的文件中
    // 根据用户选择的路径创建 QFile 对象，并打开文件
    QFile file(path);
    bool ret = file.open(QIODevice::WriteOnly);
    if(ret != true)
    {
        // 打开文件失败
        statusbar->showMessage(path + "打开失败");
        return;
    }

    // 写入文件
    const QString text = edit->toPlainText();
    file.write(text.toUtf8());

    // 关闭文件
    file.close();
}

